#!/bin/sh

add_chain() {
  /sbin/iptables -N $1
  /sbin/iptables -A $1 -p $2 --dport $3 -j ACCEPT
  /sbin/iptables -A in_mod -j $1
  /sbin/iptables -t nat -N $1
  /sbin/iptables -t nat -A $1 -p $2 --dport $3 -j ACCEPT
  /sbin/iptables -t nat -A pre_mod -j $1
}

del_chain() {
  /sbin/iptables -D in_mod -j $1
  /sbin/iptables -F $1
  /sbin/iptables -X $1
  /sbin/iptables -t nat -D pre_mod -j $1
  /sbin/iptables -t nat -F $1
  /sbin/iptables -t nat -X $1
}

MODNAME=ser2net

case "$1" in
  start)
    . /opt/$MODNAME/etc/settings
    echo -n "Starting module ser2net2: "
    if [ "$MOD_SER2NET2_ENABLED" != "1" ]; then
      echo "skipped"
      exit 0
    fi
    if [ "$MOD_SER2NET2_COMMAND_PORT" != "0" ]; then
      COMMAND_PORT="-p $MOD_SER2NET2_COMMAND_PORT "
      add_chain mod_ser2net2 tcp $MOD_SER2NET2_COMMAND_PORT 2> /dev/null
    fi
    add_chain mod_ser2net2 tcp $MOD_SER2NET2_PORT 2> /dev/null
    /opt/$MODNAME/bin/ser2net2d -d -n -P /var/run/ser2net2d.pid $COMMAND_PORT\
      -Y "connection: &PORT2" \
      -Y "  accepter: $MOD_SER2NET2_CONNECTION,$MOD_SER2NET2_PORT" \
      -Y "  timeout: $MOD_SER2NET2_TIMEOUT" \
      -Y "  connector: serialdev,/dev/ttyS1,$MOD_SER2NET2_BAUDRATE$MOD_SER2NET2_PARITY$MOD_SER2NET2_DATABITS$MOD_SER2NET2_STOPBITS" \
      -Y "  options:" \
      -Y "    dev-to-net-bufsize: 4096" \
      -Y "    net-to-dev-bufsize: 4096" \
      -Y "    chardelay-scale: ${MOD_SER2NET2_INT_CHAR_DELAY}0" \
      -Y "    chardelay-max: 1000000" &
    RETVAL=$?
    if [ $RETVAL = 0 ]; then echo "done"; else echo "failed"; fi
    exit $RETVAL
  ;;

  stop)
    echo -n "Stopping module ser2net2: "
    killall ser2net2d 2> /dev/null
    RETVAL=$?
    sleep 1
    killall -9 ser2net2d 2> /dev/null
    del_chain mod_ser2net2 2> /dev/null
    if [ $RETVAL = 0 ]; then echo "done"; else echo "failed"; fi
    exit $RETVAL
  ;;

  restart)
    $0 stop
    $0 start
  ;;

  status)
    echo -n "Module ser2net2 is "
    killall -0 ser2net2d 2> /dev/null
    RETVAL=$?
    if [ $RETVAL = 0 ]; then echo "running"; else echo "stopped"; fi
    exit $RETVAL
  ;;

  *)
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
esac
